type OmitThisParameter2<T> = unknown extends ThisParameterType<T> ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T
type Required2<T> = {
    [Key in keyof T] -?: T[Key]
}

type Exclude2<T, U> = T extends U ? never : T